/**
 * Created by Administrator on 2017/9/30 0030.
 * utc时区
 */
export function formatDate (date, fmt) {
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getUTCFullYear() + '').substr(4 - RegExp.$1.length));
  }
  let o = {
    'M+': date.getUTCMonth() + 1,
    'd+': date.getUTCDate(),
    'h+': date.getUTCHours(),
    'm+': date.getUTCMinutes(),
    's+': date.getUTCSeconds()
  };
  for (let k in o) {
    if (new RegExp(`(${k})`).test(fmt)) {
      let str = o[k] + '';
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str));
    }
  }
  return fmt;
};
// export function formatDate (date, fmt) {
//   if (/(y+)/.test(fmt)) {
//     fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
//   }
//   let o = {
//     'M+': date.getMonth() + 1,
//     'd+': date.getDate(),
//     'h+': date.getHours(),
//     'm+': date.getMinutes(),
//     's+': date.getSeconds()
//   };
//   for (let k in o) {
//     if (new RegExp(`(${k})`).test(fmt)) {
//       let str = o[k] + '';
//       fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str));
//     }
//   }
//   return fmt;
// };

function padLeftZero (str) {
  return ('00' + str).substr(str.length);
};

/**
 * 本地时区
 * @param date
 * @param fmt
 * @returns {*}
 */
export function formatLocaleDate (date, fmt) {
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
  }
  let o = {
    'M+': date.getMonth() + 1,
    'd+': date.getDate(),
    'h+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds()
  };
  for (let k in o) {
    if (new RegExp(`(${k})`).test(fmt)) {
      let str = o[k] + '';
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str));
    }
  }
  return fmt;
};


/**获取最近几个月的毫秒数
 * @param months 近几个月数量(如:近3个月,months=3)
 * @param date 起始计算日期
 * */
export const getLatestMonthsMilliseconds = (months, date) => {
  //计算起始日期年月日
  const year = date.getFullYear();
  const month = date.getMonth() + 1; //月份序号从0开始
  const day = date.getDate();
  //需要倒推的年数
  let backwardYears = Math.floor(months/12);
  //需要倒推的月数
  let backwardMonths = months%12;
  //倒推年分和月份
  let backwardYear = year - backwardYears;
  let backwardMonth = month - backwardMonths;
  //是否需要跨年倒推
  if(month <= backwardMonths) {
    backwardYear = year - backwardYears - 1;
    backwardMonth = (month) + 12 - backwardMonths;
  }
  //倒推目标年份是否是闰年
  let isLeapYear = backwardYear%4 == 0;
  //倒推日期
  let backwardDay = day + 1;
  //根据月份天数判断当前日期是否需要跨月或跨年
  switch(backwardMonth) {
    case 2:
      //日期大于28号，闰年可以算到29号
      if(day > 28) {
        //不是闰年或者日期大于29号，都要算到下个月1号
        if(!isLeapYear || day > 29) {
          backwardDay = 1;
          backwardMonth += 1;
        }
      }
      break;
    case 4:
    case 6:
    case 9:
    case 11:
      //日期为30天的月份，日期大于29号，要算到下个月1号
      if(day > 29) {
        backwardDay = 1;
        backwardMonth += 1;
      }
      break;
    case 12:
      //12月份，日期大于30号，要算到下一年1月1号
      if(day > 30) {
        backwardDay = 1;
        backwardMonth = 1;
        backwardYear += 1;
      }
      break;
    default: {
      //日期为31天的月份，日期大于30号，要算到下个月1号
      if(day > 30) {
        backwardDay = 1;
        backwardMonth += 1;
      }
    }
  }
  let backwardDate = new Date(backwardYear+"-"+backwardMonth+"-"+backwardDay);
  let millSeconds = date.getTime() - backwardDate.getTime();
  return millSeconds;
}
